package leetcode_栈;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 最小栈
 * 算法 :
 * 使用辅助栈
 * 辅助栈
 * 入栈时 , stack 正常入栈 ; 辅助栈入最小的数
 */
public class _155 {

    static class MinStack {
        Deque<Integer> stack;
        Deque<Integer> aux;

        /**
         * initialize your data structure here.
         */
        public MinStack() {
            stack = new ArrayDeque<>();
            aux = new ArrayDeque<>();
            // push 的时候减少 if 判断
            aux.push(Integer.MAX_VALUE);
        }

        public void push(int x) {
            stack.push(x);
            if (aux.peek() > x) {
                aux.push(x);
            } else {
                aux.push(aux.peek());
            }
        }

        public void pop() {
            stack.pop();
            aux.pop();
        }

        public int top() {
            return !stack.isEmpty() ? stack.peek() : -1;
        }

        public int getMin() {
            return !aux.isEmpty() ? aux.peek() : -1;
        }
    }
}
